package zhengze;

import java.util.Arrays;

/*
    String[] split(String regex)
    将当前字符串按照满足正则表达式的部分进行拆分，将将拆分出的以String[]形式来返回
 */
public class SplitDemo {
    public static void main(String[] args) {
        /**
         * 1.[]:表示一个字符,该字符可以是[]中指定的内容 例如:
         * [abc]:这个字符可以是a或b或c
         * [a-z]:表示任意一个小写字母
         * [a-zA-Z]:表示任意一个字母
         * [a-zA-Z0-9]:表示任意一个字母数字
         * [a-zA-Z0-9_]:表示任意一个数字字母下划线
         * [^abc]:该字符只要不是a或b或c
         * 2.预定义字符: .:表示任意一个字符,没有范围限制
         * \d:表示任意一个数字,等同于[0-9]
         * \w:表示任意一个单词字符,等同于[a-zA-Z0-9_]----单词字符指字母/数字/_
         * \s:表示任意一个空白字符
         * \D:表示不是数字
         * \W:不是单词字符
         * \S:不是空白字符
         * 3.量词: ?:表示前面的内容出现0-1次 例如: [abc]? 可以匹配:a 或 b 或 c 或什么也不写
         * +:表示前面的内容最少出现1次
         * 例如: [abc]+ 可以匹配:b或aaaaaaaaaa...或abcabcbabcbabcba....
         * 但是不能匹配:什么都不写 或 abcfdfsbbaqbb34bbwer...
         *
         * *:表示前面的内容出现任意次(0-多次)---匹配内容与+一致，只是可以一次都不写
         * 例如: [abc]* 可以匹配:b或aaaaaaaaaa...或abcabcba....或什么都不写
         * 但是不能匹配:abcfdfsbbaqbb34bbwer...
         *
         * {n}:表示前面的内容出现n次
         * 例如: [abc]{3} 可以匹配:aaa 或 bbb 或 aab 或abc 或bbc
         * 但是不能匹配: aaaa 或 aad
         *
         * {n,m}:表示前面的内容出现最少n次最多m次
         * 例如: [abc]{3,5} 可以匹配:aaa 或 abcab 或者 abcc
         * 但是不能匹配:aaaaaa 或 aabbd
         *
         * {n,}:表示前面的内容出现n次以上(含n次)
         * 例如: [abc]{3,} 可以匹配:aaa 或 aaaaa.... 或 abcbabbcbabcba....
         * 但是不能匹配:aa 或 abbdaw...
         *
         * 4.()用于分组,是将括号内的内容看做是一个整体
         * 例如: (abc){3} 表示abc整体出现3次. 可以匹配abcabcabc
         * 但是不能匹配aaa 或abcabc (abc|def){3}表示abc或def整体出现3次.
         */
        String line="abc123def456ghi";
        String[] date=line.split("[0-9]+");
        System.out.println(Arrays.toString(date));

        line="123.456.789";
        date=line.split("\\.");
        //正则表达式的\.表示.;java中也需要\来转义.
        System.out.println(Arrays.toString(date));

        line=".123.456..789......";
        date=line.split("\\.");
        System.out.println(Arrays.toString(date));
        //最开始就是可拆分项(.)，那么数组第1个元素为空字符串""
        // 如果连续两个(两个以上)可拆分项，那么中间也会拆出一个空字符串""
        // 如果末尾连续多个可拆分项，那么拆出的空字符串被忽略
        date=line.split("\\.",-1);//-1就是不忽略后面的空字符串
        System.out.println(Arrays.toString(date));
        date = line.split("\\.", 20);//20表示指定拆分为20个，实际拆分最大数如是不足20则按实际拆
        System.out.println(Arrays.toString(date));
    }
}
